#include "msgadd.h"
#include "tcpclient.h"


MsgAdd::MsgAdd(QWidget *parent) : QWidget(parent)
{
    qcout << "MsgAdd初始化";

    m_scrollArea = new QScrollArea;
    m_pScrollLayout = new QVBoxLayout;
    m_scrollArea->setWidgetResizable(false);//关闭自动调整大小
    //m_scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);//强制显示垂直滚动


    // 创建内部容器（承载动态内容）
    contentWidget = new QWidget(m_scrollArea);
    layout = new QVBoxLayout(contentWidget);
    layout->setContentsMargins(10, 10, 10, 10);  // 左、上、右、下边距
    contentWidget->setLayout(layout);
    //contentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

    m_pScrollLayout->addWidget(contentWidget);
    m_scrollArea->setLayout(m_pScrollLayout);


    m_pMainLayout = new QVBoxLayout;
    m_pMainLayout->addWidget(m_scrollArea);


    setLayout(m_pMainLayout);
    //MessageTipWidget::getInstance().setParent(this);


}

//单例获取MsgAdd控件
MsgAdd &MsgAdd::getInstance()
{
    static MsgAdd instance;
    return instance;
}




//    // 动态添加子控件
//    for (int i = 0; i < 15; ++i) {
//        QPushButton *btn = new QPushButton(QString("Item %1").arg(i));
//        // 设置3px蓝色实线边框，并限定作用域避免影响子控件:ml-citation{ref="1,3" data="citationList"}

//        btn->setStyleSheet("margin:5px; padding:8px;");
//        btn->setFixedHeight(50);  // 固定高度
//        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
//        layout->addWidget(btn);
//    }

//添加消息控件
void MsgAdd::addMsgWidget(const PDU* pdu)
{
    //接收用户名
    char fname[32] = {'\0'};
    char sname[32] = {'\0'};
    strncpy(fname, pdu->caData, 32);//从接收的数据中提取前32个字符给caName, 这个作为客户端
    strncpy(sname, pdu->caData+32, 32);
    QString fName = QString(fname);
    QString sName = TcpClient::getInstance().getmloginName();

    qcout << "想加好友的人是: " << fName;
    qcout << "被邀请的人: sName : " << sName;


    QPushButton *btn = new QPushButton(fName + "打算添加好友");
    btn->setProperty("btnName", fName);    btn->setStyleSheet("margin:5px; padding:8px;");
    btn->setFixedHeight(50);  // 固定高度
    btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    layout->addWidget(btn);
    // 设置内部容器尺寸（触发滚动条）
    contentWidget->setFixedWidth(m_scrollArea->width());  // 宽度跟随父控件
    contentWidget->adjustSize();  // 根据内容自动计算高度

    contentWidget->setLayout(layout);

    m_pScrollLayout->addWidget(contentWidget);

    // 关联滚动区域
    m_scrollArea->setLayout(m_pScrollLayout);
    //m_scrollArea->setWidget(contentWidget);

    //按钮添加到链表中
    //m_pLwidget.append(btn);
    MyPushButtonName* m = new MyPushButtonName;
    //MyPushButtonName m;
    m->setBtn(btn);
    m->setName(fName);
    m_pLwidget.append(m);

    connect(btn, &QPushButton::clicked, [=](){
        //QString fName = btn->property("btnName").toString();
        qcout << "点击按钮" << fName;
        int reply = QMessageBox::information(
                    this,
                    "添加好友",
                    "是否添加 " + fName+"为好友?",

                    "添加",//添加按钮, 第一个按钮
                    "拒绝",//拒绝按钮, 第二个按钮
                    //"暂不处理",//暂不处理
                    0//默认选中第一个按钮



                   );
        if(0 == reply)
        {
            //同意添加好友
            qcout << "添加" << fName;
            btn->hide();//按钮隐藏

        }
        else if(1 == reply)
        {
            //拒绝添加好友
            qcout << "拒绝" << fName;
            btn->hide();//按钮隐藏


        }

        //给TcpClient发送信号, 把同意添加好友的消息发送给服务器, 服务器在转发给fName
        emit signals_sendToServerPBAddFriend(fName, reply);
        //emit signals_sendToServerPBAddFriend(pdu, reply);//老是捕获不到pdu的地址, lambda函数执行完, pdu的栈地址被释放
        //emit signals_sendToServerPBAddFriend(pdu_ptr, reply);

    }

    );




}


//添加好友同意的控件
void MsgAdd::addMsgWidget_Agree(const PDU *pdu)
{

    //接收用户名
    char fname[32] = {'\0'};
    char sname[32] = {'\0'};
    strncpy(fname, pdu->caData, 32);//请求方
    strncpy(sname, pdu->caData+32, 32);//拒绝方
    QString fName = QString(fname);
    QString sName = QString(sname);

    QPushButton *btn = new QPushButton(sName + "同意添加");
    btn->setFixedHeight(50);  // 固定高度
    btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    layout->addWidget(btn);
    // 设置内部容器尺寸（触发滚动条）
    contentWidget->setFixedWidth(m_scrollArea->width());  // 宽度跟随父控件
    contentWidget->adjustSize();  // 根据内容自动计算高度

    contentWidget->setLayout(layout);

    m_pScrollLayout->addWidget(contentWidget);

    // 关联滚动区域
    m_scrollArea->setLayout(m_pScrollLayout);
    //m_scrollArea->setWidget(contentWidget);


    connect(btn, &QPushButton::clicked, [=](){
        //QString fName = btn->property("btnName").toString();
        qcout << "对方同意了" << sName;
        //
        //AddFriendAgreePB向OpeWidget发送信号, 用于在OpeWidget::TextEdit上显示log输出
        emit signal_m_pAddFriendAgree_clicked(sName + "同意添加好友");

        btn->hide();
        }

    );


}

//添加好友拒绝的控件
void MsgAdd::addMsgWidget_Refuse(const PDU *pdu)
{
    //接收用户名
    char fname[32] = {'\0'};
    char sname[32] = {'\0'};
    strncpy(fname, pdu->caData, 32);//请求方
    strncpy(sname, pdu->caData+32, 32);//拒绝方
    QString fName = QString(fname);
    QString sName = QString(sname);

    QPushButton *btn = new QPushButton(sName + "拒绝");
    btn->setFixedHeight(50);  // 固定高度
    btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    layout->addWidget(btn);
    // 设置内部容器尺寸（触发滚动条）
    contentWidget->setFixedWidth(m_scrollArea->width());  // 宽度跟随父控件
    contentWidget->adjustSize();  // 根据内容自动计算高度

    contentWidget->setLayout(layout);

    m_pScrollLayout->addWidget(contentWidget);

    // 关联滚动区域
    m_scrollArea->setLayout(m_pScrollLayout);
    //m_scrollArea->setWidget(contentWidget);


    connect(btn, &QPushButton::clicked, [=](){
        //QString fName = btn->property("btnName").toString();
        qcout << "对方拒绝了 " << sName;
        //
        //AddFriendAgreePB向OpeWidget发送信号, 用于在OpeWidget::TextEdit上显示log输出
        emit signal_m_pAddFriendAgree_clicked(sName+"拒绝加好友了");
        btn->hide();
        }

    );
}







